package Z代码随想录.数组;

public class BinarySearch {


    // 使用二分查找的前提是：数组为有序数组，同时数组中没有重复元素，如果有重复元素可能下标会不唯一
    // 在考虑二分查找的时候，最重要的就是 根据区间的定义来做边界处理
    // 此处考虑的是 左闭右闭的区间
    // 时间复杂度O（logn）
    public int search(int[] nums, int target) {
        if (target < nums[0] || target > nums[nums.length - 1]) {
            return -1;
        }
        int left = 0;
        int right = nums.length - 1;
        while (left <= right) {
            int mid = left + ((right - left) >> 1);
            if (nums[mid] == target) {
                return mid;
            } else if (nums[mid] > target) {
                right = mid - 1;
            }else {
                left = mid + 1;
            }
        }
        return -1;
    }
}
